Skip to content

Support json output#1061

Merged
ericmj merged 8 commits into
hexpm:mainfrom
TylerWitt:support-json-output
May 19, 2026
Merged

Support json output#1061
ericmj merged 8 commits into
hexpm:mainfrom
TylerWitt:support-json-output

Conversation

@TylerWitt

Copy link
Copy Markdown
Contributor

This supports passing a --json flag to mix hex.outdated for programmatic use.

In order to make the change a bit easier, I separated out 3 things. Previously, the task was laid out as a single vs all format, where both versions dealt with similar logic.

I split them in to three pieces.

  • process_lockfile -> This basically formats all the dependencies into a tuple {package, lock_version, latest_version, requirements, outdated?}
  • display_outdated -> This structures the view layer--either as a table (existing logic), or as json.
  • set_exit_code -> This sets the exit code based on whether things are outdated, and whether or not certain opts have been passed.

This unifies outdated dependency processing.

All behaviors should be the same, except for one edge case.

If there is only one dependency, the display will be the same as `single`. I'm not sure if that's an issue or not.

Assuming that the current UI is not meant to be programmatically accessed it should be fine.
Printed tables are hard to use programmatically.

This change will enable the ability to output the task as serialized json.
Showing the previous `single` view any time there was one dependency broke a test, so I reverted the change and now pass args to be able to detect if a single app was requested or not.
ericmj added 2 commits May 19, 2026 15:48
Resolve conflicts in lib/mix/tasks/hex.outdated.ex by combining the
JSON output restructure with main's `--only` filter and `dep_only`
column. Replace Jason with OTP's `:json` module to avoid a new
runtime dependency.
Previously these options only affected `mix hex.outdated` without an app
argument. The refactor accidentally made them apply when a single app
was specified, changing exit-code behavior for that path.
@ericmj ericmj merged commit 70e17f7 into hexpm:main May 19, 2026
12 checks passed
@ericmj

ericmj commented May 19, 2026

Copy link
Copy Markdown
Member

Sorry for the delay.
Thank you! 💜

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants